package com.conlin.learn.io;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;

/**
 * I/O 实际上是input和output，也就是输入和输出。而流其实是一种抽象的概念，它表示的是数据的无结构化传递
 *
 * 水流：通过IO操作，在应用程序和磁盘之间生成管道，
 * 输入操作，就是通过管道不断地将数据读取到内存，
 * 输出操作，就是把内存中的数据写出到磁盘
 *
 * 文件上传
 *
 * 磁盘、内存、网络
 *
 * 核心：File、InputStream、OutPutStream、Reader、Writer
 *
 */
public class FirstInputStreamTest {
    public static void main(String[] args) {
        String ioTestFile = Objects.requireNonNull(FirstInputStreamTest.class.getClassLoader().getResource("files/ioTest.txt")).getPath();

        // 1、建通道
        try(InputStream inputStream = new FileInputStream(ioTestFile);) {
            // 读到第一个字符
            int read = inputStream.read();

            // 将读到的第一个字符转成ASCII码
            System.out.println((char)read);

            // 读取全部数据
            // 定义一个缓冲区，大小为 1024 字节
            byte[] buffer = new byte[1024];
            int bytesRead;

            // 循环读取数据，直到遇到流的末尾
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                // 处理读取到的字节
                System.out.println("读取了 " + bytesRead + " 个字节");

                // 将字节转换为字符串并输出（仅作示例）
                String data = new String(buffer, 0, bytesRead);
                System.out.println(data);
            }

        }catch (IOException e) {
            e.printStackTrace();
        }

    }
}
